import axios from 'axios';

// 创建 axios 实例
const request = axios.create({
    baseURL: '/api',  // 设置基础URL
    timeout: 10000      // 请求超时设置为1000毫秒（1秒）
});

// 请求拦截器
request.interceptors.request.use(
    config => {
        //讲 token  存储到  本地去
        // 在请求发送之前做一些处理，例如添加token
        const token = localStorage.getItem('token');  // 假设token存储在localStorage中
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`;  // 在请求头中添加token
        }
        // 可以在此修改请求参数
        // config.headers['Content-Type'] = 'application/json';  // 如果需要设置其他请求头
        return config;  // 返回配置以继续请求
    },
    error => {
        // 请求错误处理
        console.error('请求错误:', error);
        return Promise.reject(error);  // 请求错误时返回 Promise 的拒绝
    }
);

// 响应拦截器
request.interceptors.response.use(
    response => {
        // 在响应数据返回之前做一些处理
        if (response.status === 200) {
            // 如果响应状态是200，返回数据
            return response.data;  // 你可以在这里做统一的处理，例如返回自定义的格式
        }
        // 其他状态的处理，例如统一处理某些异常
        return Promise.reject(new Error('请求失败'));
    },
    error => {
        // 响应错误处理
        if (error.response) {
            // 服务器响应了，但响应状态码表示请求失败
            console.error('响应错误:', error.response.status);
            // 根据不同的错误码做不同处理
            if (error.response.status === 401) {
                // 如果是 401 错误（未授权），可以跳转到登录页面
                window.location.href = '/login';  // 跳转到登录页面
            }
            // 可以根据状态码或错误类型进行不同的错误提示或处理
        } else if (error.request) {
            // 请求已发出但没有响应
            console.error('请求未响应:', error.request);
        } else {
            // 其他错误
            console.error('其他错误:', error.message);
        }
        return Promise.reject(error);  // 返回 Promise 的拒绝，便于处理异常
    }
);

export default request;
